--- src/lib/initiator.c.orig	2011-02-22 21:45:59.000000000 +0900
+++ src/lib/initiator.c		2011-02-27 21:18:41.000000000 +0900
@@ -622,6 +622,7 @@
 }
 
 
+#if 0
 int
 iscsi_initiator_get_targets(int target, strv_t *svp)
 {
@@ -675,6 +676,27 @@
 
 	return 1;
 }
+#else
+/* SendTargets=All must be sent in discovery session. */
+int
+iscsi_initiator_get_targets(int target, strv_t *svp)
+{
+	initiator_session_t	*sess = g_target[target].sess;
+	strv_t *tp = &g_target[target].all_targets;
+	int i;
+
+	if (sess == NULL)
+		return -1;
+
+	for (i = 0; i < tp->c; i++) {
+		ALLOC(char *, svp->v, svp->size, svp->c, 10,
+			10, "igt", return -1);
+		svp->v[svp->c++] = strdup(tp->v[i]);
+	}
+
+	return 1;
+}
+#endif
 
 static int 
 discovery_phase(int target, strv_t *svp)
@@ -1273,7 +1295,7 @@
 
 			if (strlen(g_target[(int)target].TargetName) == 0) {
 				iscsi_trace(TRACE_ISCSI_DEBUG, "enqueue_worker: entering Discovery phase with target %llu\n", target);
-				rc = discovery_phase((int)target, &sv);
+				rc = discovery_phase((int)target, &g_target[(int)target].all_targets);
 				iscsi_trace(TRACE_ISCSI_DEBUG, "enqueue_worker: Discovery phase complete\n");
 
 				/* Destroy session */
